# The list of subjects, the order of conditions, and the thresholds are derived from Subjects.xlsx
# Read in the Excel worksheet:
library(xlsx)
## Loading required package: rJava
## Warning: package 'rJava' was built under R version 3.2.3
## Loading required package: xlsxjars
library(ggplot2)
library(plyr)
library(matrixStats)
## Warning: package 'matrixStats' was built under R version 3.2.5
## matrixStats v0.50.2 (2016-04-24) successfully loaded. See ?matrixStats for help.
## 
## Attaching package: 'matrixStats'
## The following object is masked from 'package:plyr':
## 
##     count
library(splines)
source('/Users/Egor/Dropbox/Prog/R/myFunctions/blackTheme.R')
## Warning: package 'gridExtra' was built under R version 3.2.4
dataDir <- '/Users/Egor/Dropbox/Projects/supr-eff/data/'
subjList <- read.xlsx(file=paste(dataDir,'Subjects.xlsx',sep=''), 1, colIndex=c(1:8), header=T)
subjList$Subj<- as.factor(subjList$Subj)
condList <- c('s1','s2','s3')
# dropSubjs <- c(2) # X[ ! X$Variable1 %in% c(11,12), ]
shortRT <- .5
outlFac <- 2.5 # outlier factor
# Gathering the directories from the data directory:
allDirs <- dir(dataDir)
# Setting variables for the loop:
ds <- data.frame()
allrts <- data.frame()
aarts <- data.frame()
rtds <- data.frame()
curSubj <- 1 #temp
curCond <- 1 #temp
for(curSubj in 1:length(subjList$Subj)){ #going through all dirs
    for(curCond in 1:length(condList)){
        grepPattern <- paste('dm_p-', subjList$Subj[curSubj], '_dom-', subjList$DomEye[curSubj],
                             '_', condList[curCond], '_t0_', sep='')
        subjDir <- allDirs[grep(grepPattern, allDirs)]
        # With this directory, extracting data:
        subjDataFN <- paste(dataDir, subjDir, '/', subjDir, '_trials.tsv', sep='')
        if(file.exists(subjDataFN)){
            nConds <- 13
            nc <- nConds-1 # the number of conditions without the blank
            ss <- read.table(subjDataFN, sep='\t', nrows=nConds, header=T)
            sumss <- ss[,1:27]
            # Inserting subject ID and subject threshold
            sumss$SubjID <- subjList$Subj[curSubj]
            sumss$subjThresh <- subjList$subjThresh[curSubj]
            # I can't take RT_mean, because it doesn't exclude zeros
            # Need to get the RTs on my own, and since the nTrials might
            # differ...
            nTrials <- ss$n[1]
            rts <- ss[,30:(29+nTrials)]
            if(curCond==1){
                allrts <- rts
            }else{
                allrts <- cbind(rts,allrts)
            }
            print(paste('Processed file',subjDataFN))
        }else{
                print(paste('File does not exist:',subjDataFN))
        }
    }
    # Counting and removing RTs<shortRT and non-responses
    sumss$cnt_RTshort <- c(rowSums(allrts[1:nc,]<shortRT),0) 
    sumss$cnt_RTna <- rowSums(allrts==0)
    # Handling non-responses in two different ways: either equating them to 3s (max RT) or to NA
    rt3 <- allrts
    rt3[rt3==0] <- 3 #maximum rt
    sumss$RT3_mean <- 0 # c(rowMeans(rt3[1:nc,],na.rm=T),0)
    sumss$RT3_mean <- c(rowMeans(rt3[1:nc,],na.rm=T),0)
    sumss$RT3_norm <- c(sumss$RT3_mean[1:nc]/mean(sumss$RT3_mean[1:nc],na.rm=T),0)
    sumss$RT3_norm <- 0
    sumss$RT3_norm[1:(nc/2)] <- sumss$RT3_mean[1:(nc/2)]/mean(sumss$RT3_mean[1:(nc/2)],na.rm=T)
    sumss$RT3_norm[(nc/2+1):nConds] <- c(sumss$RT3_mean[(nc/2+1):nc]/mean(sumss$RT3_mean[(nc/2+1):nc],
                                                                          na.rm=T),0)
    # RTs with exclusions as NA:
    rtna <- allrts
    rtna[rtna==0] <- NA
    rtna[rtna<shortRT] <- NA
    # Dealing with the outliers:
    sumss$RTna_mean <- c(rowMeans(rtna[1:nc,],na.rm=T),0)
    sumss$RTna_median <- c(rowMedians(as.matrix(rtna[1:nc,]),na.rm=T),0)
    sumss$RTna_sd <- c(apply(rtna[1:nc,],1,sd,na.rm=T),0)
    sumss$RTna_outlLow <- rowSums(rtna<(sumss$RTna_mean-outlFac*sumss$RTna_sd), na.rm=T)
    sumss$RTna_outlHigh <- rowSums(rtna>(sumss$RTna_mean+outlFac*sumss$RTna_sd), na.rm=T)
    rtna[rtna<(sumss$RTna_mean-outlFac*sumss$RTna_sd)] <- NA
    rtna[rtna>(sumss$RTna_mean+outlFac*sumss$RTna_sd)] <- NA
    sumss$RTna_mean <- c(rowMeans(rtna[1:nc,],na.rm=T),0)
    sumss$RTna_sd <- c(apply(rtna[1:nc,],1,sd,na.rm=T),0)
    sumss$RTna_norm <- c(sumss$RTna_mean[1:nc]/mean(sumss$RTna_mean[1:nc],na.rm=T),0)
    sumss$RTna_norm[1:(nc/2)] <- sumss$RTna_mean[1:(nc/2)]/mean(sumss$RTna_mean[1:(nc/2)],na.rm=T)
    sumss$RTna_norm[(nc/2+1):nConds] <- c(sumss$RTna_mean[(nc/2+1):nc]/
                                          mean(sumss$RTna_mean[(nc/2+1):nc], na.rm=T),0)
    # Filling up aarts only after rtna has been cleaned up
    if(curSubj==1){
        aarts <- cbind(sumss,rtna)
    }else{
        aarts <- rbind(aarts,cbind(sumss,rtna))
    }
    # Binding the summary statistics with the empty data frame
    ds <- rbind(ds, sumss)
    rtds <- rbind(rtds,aarts)
}
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-0_dom-r_s1_t0_2016-04-29_1556/dm_p-0_dom-r_s1_t0_2016-04-29_1556_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-0_dom-r_s2_t0_2016-04-29_1607/dm_p-0_dom-r_s2_t0_2016-04-29_1607_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-0_dom-r_s3_t0_2016-04-29_1618/dm_p-0_dom-r_s3_t0_2016-04-29_1618_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-1_dom-r_s1_t0_2016-04-28_1413/dm_p-1_dom-r_s1_t0_2016-04-28_1413_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-1_dom-r_s2_t0_2016-04-28_1427/dm_p-1_dom-r_s2_t0_2016-04-28_1427_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-1_dom-r_s3_t0_2016-04-28_1439/dm_p-1_dom-r_s3_t0_2016-04-28_1439_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-2_dom-r_s1_t0_2016-04-28_1509/dm_p-2_dom-r_s1_t0_2016-04-28_1509_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-2_dom-r_s2_t0_2016-04-28_1519/dm_p-2_dom-r_s2_t0_2016-04-28_1519_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-2_dom-r_s3_t0_2016-04-28_1529/dm_p-2_dom-r_s3_t0_2016-04-28_1529_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-3_dom-r_s1_t0_2016-04-28_1630/dm_p-3_dom-r_s1_t0_2016-04-28_1630_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-3_dom-r_s2_t0_2016-04-28_1637/dm_p-3_dom-r_s2_t0_2016-04-28_1637_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-3_dom-r_s3_t0_2016-04-28_1645/dm_p-3_dom-r_s3_t0_2016-04-28_1645_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-4_dom-r_s1_t0_2016-04-28_1705/dm_p-4_dom-r_s1_t0_2016-04-28_1705_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-4_dom-r_s2_t0_2016-04-28_1714/dm_p-4_dom-r_s2_t0_2016-04-28_1714_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-4_dom-r_s3_t0_2016-04-28_1722/dm_p-4_dom-r_s3_t0_2016-04-28_1722_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-5_dom-r_s1_t0_2016-04-29_1518/dm_p-5_dom-r_s1_t0_2016-04-29_1518_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-5_dom-r_s2_t0_2016-04-29_1527/dm_p-5_dom-r_s2_t0_2016-04-29_1527_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-5_dom-r_s3_t0_2016-04-29_1536/dm_p-5_dom-r_s3_t0_2016-04-29_1536_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-6_dom-r_s1_t0_2016-04-29_1640/dm_p-6_dom-r_s1_t0_2016-04-29_1640_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-6_dom-r_s2_t0_2016-04-29_1648/dm_p-6_dom-r_s2_t0_2016-04-29_1648_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-6_dom-r_s3_t0_2016-04-29_1659/dm_p-6_dom-r_s3_t0_2016-04-29_1659_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-7_dom-r_s1_t0_2016-05-02_1026/dm_p-7_dom-r_s1_t0_2016-05-02_1026_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-7_dom-r_s2_t0_2016-05-02_1036/dm_p-7_dom-r_s2_t0_2016-05-02_1036_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-7_dom-r_s3_t0_2016-05-02_1044/dm_p-7_dom-r_s3_t0_2016-05-02_1044_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-8_dom-r_s1_t0_2016-05-02_1410/dm_p-8_dom-r_s1_t0_2016-05-02_1410_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-8_dom-r_s2_t0_2016-05-02_1418/dm_p-8_dom-r_s2_t0_2016-05-02_1418_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-8_dom-r_s3_t0_2016-05-02_1426/dm_p-8_dom-r_s3_t0_2016-05-02_1426_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-9_dom-r_s1_t0_2016-05-05_1209/dm_p-9_dom-r_s1_t0_2016-05-05_1209_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-9_dom-r_s2_t0_2016-05-05_1217/dm_p-9_dom-r_s2_t0_2016-05-05_1217_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-9_dom-r_s3_t0_2016-05-05_1223/dm_p-9_dom-r_s3_t0_2016-05-05_1223_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-10_dom-r_s1_t0_2016-05-05_1314/dm_p-10_dom-r_s1_t0_2016-05-05_1314_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-10_dom-r_s2_t0_2016-05-05_1322/dm_p-10_dom-r_s2_t0_2016-05-05_1322_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-10_dom-r_s3_t0_2016-05-05_1330/dm_p-10_dom-r_s3_t0_2016-05-05_1330_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-11_dom-r_s1_t0_2016-05-05_1401/dm_p-11_dom-r_s1_t0_2016-05-05_1401_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-11_dom-r_s2_t0_2016-05-05_1409/dm_p-11_dom-r_s2_t0_2016-05-05_1409_trials.tsv"
## [1] "Processed file /Users/Egor/Dropbox/Projects/supr-eff/data/dm_p-11_dom-r_s3_t0_2016-05-05_1416/dm_p-11_dom-r_s3_t0_2016-05-05_1416_trials.tsv"
ds$maskSpeed <- as.factor(ds$maskSpeed)
ds$targSpeed <- as.factor(ds$targSpeed)
ds <- ds[ds$targSpeed!=0,]

# Splitting subjects into high- and low-threshold pools:
subjTl <- subjList$Subj[subjList$subjThresh<1]
subjTh <- subjList$Subj[subjList$subjThresh>1]
dsTl <- ds[ds$SubjID %in% subjTl,]
dsTh <- ds[ds$SubjID %in% subjTh,]

Quality checks

Individual thresholds

# Line plots for non-broken trials:
ggplot(subjList, aes(x=Subj, y=subjThresh, fill=Subj)) + geom_bar(stat='identity') + 
    theme(legend.position='none') + labs(x='Subject ID', y='Subject Threshold') +
    theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Non-breaking trials

# Line plots for non-broken trials:
ggplot(ds[ds$targSpeed==1,], aes(x=maskSpeed, y=cnt_RTna/24, group=SubjID, colour=SubjID)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Subject ID',
                                      y='Number of non-breaking trials') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

ggplot(ds[ds$targSpeed==5,], aes(x=maskSpeed, y=cnt_RTna/24, group=SubjID, colour=SubjID)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Subject ID',
                                      y='Number of non-breaking trials') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

ss = ddply(ds, .(maskSpeed,targSpeed), summarise, `Mean non-breaking trials`=mean(cnt_RTna/24))
ggplot(ss, aes(x=maskSpeed, y=`Mean non-breaking trials`, colour=targSpeed, group=targSpeed)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

RT SDs

ggplot(ds[ds$targSpeed==1,], aes(x=maskSpeed, y=RTna_sd, group=SubjID, colour=SubjID)) + 
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Subject ID',
                                      y='RT standard deviation') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
## Warning: Removed 1 rows containing missing values (geom_point).

ggplot(ds[ds$targSpeed==5,], aes(x=maskSpeed, y=RTna_sd, group=SubjID, colour=SubjID)) + 
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Subject ID',
                                      y='RT standard deviation') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

RT Outliers (low)

ggplot(ds[ds$targSpeed==1,], aes(x=SubjID, y=RTna_outlLow, fill=SubjID)) + 
    geom_bar(stat='identity') + labs(x='Subject ID',y='Low outlier count') +
    theme(legend.position='none') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

ggplot(ds[ds$targSpeed==5,], aes(x=SubjID, y=RTna_outlLow, fill=SubjID)) + 
    geom_bar(stat='identity') + labs(x='Subject ID',y='Low outlier count') +
    theme(legend.position='none') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

RT Outliers (high)

ggplot(ds[ds$targSpeed==1,], aes(x=SubjID, y=RTna_outlHigh, fill=SubjID)) + 
    geom_bar(stat='identity') + labs(x='Subject ID',y='High outlier count') +
    theme(legend.position='none') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

ggplot(ds[ds$targSpeed==5,], aes(x=SubjID, y=RTna_outlHigh, fill=SubjID)) + 
    geom_bar(stat='identity') + labs(x='Subject ID',y='High outlier count') +
    theme(legend.position='none') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Reaction times

Raw RTs

# Line plots of raw RTs per subject
ggplot(ds[ds$targSpeed==1,], aes(x=maskSpeed, y=RTna_mean, group=SubjID, colour=SubjID)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Subject ID',
                                      y='Mean RT') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

ggplot(ds[ds$targSpeed==5,], aes(x=maskSpeed, y=RTna_mean, group=SubjID, colour=SubjID)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Subject ID',
                                      y='Mean RT') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Normalized RTs

# Line plots of normalized RTs
ggplot(ds[ds$targSpeed==1,], aes(x=maskSpeed, y=RTna_norm, group=SubjID, colour=SubjID)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Subject ID',
                                      y='Normalized RT') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

ggplot(ds[ds$targSpeed==5,], aes(x=maskSpeed, y=RTna_norm, group=SubjID, colour=SubjID)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Subject ID',
                                      y='Normalized RT') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Summary plots

Box plots

Raw

ggplot(ds, aes(x=maskSpeed, y=RTna_mean, colour=targSpeed)) +  geom_boxplot() + 
    labs(x='Mask Speed', colour='Target Speed', y='Mean RT') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Normalized

ggplot(ds, aes(x=maskSpeed, y=RTna_norm, colour=targSpeed)) +  geom_boxplot() + 
    labs(x='Mask Speed', colour='Target Speed', y='Normalized RT') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Raw low-threshold

ggplot(dsTl, aes(x=maskSpeed, y=RTna_mean, colour=targSpeed)) +  geom_boxplot() + 
    labs(x='Mask Speed', colour='Target Speed', y='Mean RT') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Normalized low-threshold

ggplot(dsTl, aes(x=maskSpeed, y=RTna_norm, colour=targSpeed)) +  geom_boxplot() + 
    labs(x='Mask Speed', colour='Target Speed', y='Normalized RT') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Line plots of summary RTs: Means

Raw

ss = ddply(ds, .(maskSpeed,targSpeed), summarise, `Mean RT`=mean(RTna_mean))
ggplot(ss, aes(x=maskSpeed, y=`Mean RT`, colour=targSpeed, group=targSpeed)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Smoothed

ggplot(ds, aes(x=maskSpeed, y=RTna_mean, colour=targSpeed, group=targSpeed)) +  
    stat_smooth(method='lm', formula=y~ns(x,3), aes(fill=targSpeed)) + 
    labs(x='Mask Speed', y='Mean RT', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Normalized

ss = ddply(ds, .(maskSpeed,targSpeed), summarise, `Mean Normalized RT`=mean(RTna_norm))
ggplot(ss, aes(x=maskSpeed, y=`Mean Normalized RT`, colour=targSpeed, group=targSpeed)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Line plots of summary RTs: Medians

Mean of medians

ss = ddply(ds, .(maskSpeed,targSpeed), summarise, `Median RT`=mean(RTna_median))
ggplot(ss, aes(x=maskSpeed, y=`Median RT`, colour=targSpeed, group=targSpeed)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black() 
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Median of medians

ss = ddply(ds, .(maskSpeed,targSpeed), summarise, `Median RT`=median(RTna_median))
ggplot(ss, aes(x=maskSpeed, y=`Median RT`, colour=targSpeed, group=targSpeed)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Median of means

ss = ddply(ds, .(maskSpeed,targSpeed), summarise, `Median RT`=median(RTna_mean))
ggplot(ss, aes(x=maskSpeed, y=`Median RT`, colour=targSpeed, group=targSpeed)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Median of normalized

ss = ddply(ds, .(maskSpeed,targSpeed), summarise, `Median Normalized RT`=median(RTna_norm))
ggplot(ss, aes(x=maskSpeed, y=`Median Normalized RT`, colour=targSpeed, group=targSpeed)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Summary plots for low-threshold subjects

Mean of medians

ss = ddply(dsTl, .(maskSpeed,targSpeed), summarise, `Median RT`=mean(RTna_median))
ggplot(ss, aes(x=maskSpeed, y=`Median RT`, colour=targSpeed, group=targSpeed)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Median of medians

ss = ddply(dsTl, .(maskSpeed,targSpeed), summarise, `Median RT`=median(RTna_median))
ggplot(ss, aes(x=maskSpeed, y=`Median RT`, colour=targSpeed, group=targSpeed)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Median of means

ss = ddply(dsTl, .(maskSpeed,targSpeed), summarise, `Median RT`=median(RTna_mean))
ggplot(ss, aes(x=maskSpeed, y=`Median RT`, colour=targSpeed, group=targSpeed)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Raw

ss = ddply(dsTl, .(maskSpeed,targSpeed), summarise, `Mean RT`=mean(RTna_mean))
ggplot(ss, aes(x=maskSpeed, y=`Mean RT`, colour=targSpeed, group=targSpeed)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Normalized

ss = ddply(dsTl, .(maskSpeed,targSpeed), summarise, `Mean Normalized RT`=mean(RTna_norm))
ggplot(ss, aes(x=maskSpeed, y=`Mean Normalized RT`, colour=targSpeed, group=targSpeed)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Summary plots for high-threshold subjects

Raw

ss = ddply(dsTh, .(maskSpeed,targSpeed), summarise, `Mean RT`=mean(RTna_mean))
ggplot(ss, aes(x=maskSpeed, y=`Mean RT`, colour=targSpeed, group=targSpeed)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Normalized

ss = ddply(dsTh, .(maskSpeed,targSpeed), summarise, `Mean Normalized RT`=mean(RTna_norm))
ggplot(ss, aes(x=maskSpeed, y=`Mean Normalized RT`, colour=targSpeed, group=targSpeed)) +  
    geom_line() + geom_point() + labs(x='Mask Speed', colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

Linear models

# Loading libraries
library(lme4)
## Warning: package 'lme4' was built under R version 3.2.3
## Loading required package: Matrix
library(reshape)
## 
## Attaching package: 'reshape'
## The following object is masked from 'package:Matrix':
## 
##     expand
## The following objects are masked from 'package:plyr':
## 
##     rename, round_any
# Preparing the data set...
# Creating character strings for naming the trials:
rtss <- rtds
trialColNames <- paste('t',as.character(c(1:24)),sep='')
colnames(rtss)[(length(rtss)-24):(length(rtss))] <- trialColNames
## Warning in colnames(rtss)[(length(rtss) - 24):(length(rtss))] <-
## trialColNames: number of items to replace is not a multiple of replacement
## length
# Melting the data set to have a trial per row:
md <- melt(rtss, id=c('SubjID','subjThresh','targSpeed','maskSpeed'),measure.vars=trialColNames)
md <- md[md$targSpeed!=0,] # deleting blank trials
rownames(md)=NULL
# Renaming the variables for trial and RT:
md <- rename(md,c('variable'='trial','value'='RT'))
# Renaming the trial variables to trial number:
# nSubj <- 8
# md$trial <- rep(c(1:24),each=48*nSubj)
md$trial <- as.numeric(substr(as.character(md$trial),2,3))

Smoothed on raw

Cubic effects

ggplot(md, aes(x=maskSpeed, y=RT, colour=factor(targSpeed), group=factor(targSpeed))) +  
    stat_smooth(method='lm', formula=y~ns(x,3)) + 
    labs(x='Mask Speed', y='RT',colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
## Warning: Removed 2828 rows containing non-finite values (stat_smooth).

ggplot(md, aes(x=maskSpeed, y=RT, colour=factor(targSpeed), group=factor(targSpeed))) +  
    stat_smooth(method='lm', formula=y~ns(x,3)) + geom_point() +
    labs(x='Mask Speed', y='RT',colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead

## Warning: Removed 2828 rows containing non-finite values (stat_smooth).
## Warning: Removed 2828 rows containing missing values (geom_point).

Quartic effects

ggplot(md, aes(x=maskSpeed, y=RT, colour=factor(targSpeed), group=factor(targSpeed))) +  
    stat_smooth(method='lm', formula=y~ns(x,4)) + 
    labs(x='Mask Speed', y='RT',colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
## Warning: Removed 2828 rows containing non-finite values (stat_smooth).

Quartic effects with low-threshold participants

ssTl <- md[md$SubjID %in% subjTl,]
ssTh <- md[md$SubjID %in% subjTh,]
ggplot(ssTl, aes(x=maskSpeed, y=RT, colour=factor(targSpeed), group=factor(targSpeed))) +  
    stat_smooth(method='lm', formula=y~ns(x,4)) + 
    labs(x='Mask Speed', y='RT',colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
## Warning: Removed 1252 rows containing non-finite values (stat_smooth).

Quintic effects

ggplot(md, aes(x=maskSpeed, y=RT, colour=factor(targSpeed), group=factor(targSpeed))) +  
    stat_smooth(method='lm', formula=y~ns(x,5)) + 
    labs(x='Mask Speed', y='RT',colour='Target Speed') + theme_black()
## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of
## `axis.text` instead
## Warning: Removed 2828 rows containing non-finite values (stat_smooth).

Simple model

Running a simple linear model reveals an effect of target speed, but not the mask speed or the interaction between mask and target speed. The main effect of mask speed does, however, approach significance.

# Running the simplest model
m1 <- lmer(RT~maskSpeed*targSpeed+(1|SubjID), md)
anova(m1)
## Analysis of Variance Table
##                     Df Sum Sq Mean Sq F value
## maskSpeed            1 58.260  58.260  338.08
## targSpeed            1 28.386  28.386  164.72
## maskSpeed:targSpeed  1  6.726   6.726   39.03
summary(m1)
## Linear mixed model fit by REML ['lmerMod']
## Formula: RT ~ maskSpeed * targSpeed + (1 | SubjID)
##    Data: md
## 
## REML criterion at convergence: 21314.2
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -3.9185 -0.6188 -0.0457  0.6079  3.9802 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  SubjID   (Intercept) 0.1332   0.3650  
##  Residual             0.1723   0.4151  
## Number of obs: 19636, groups:  SubjID, 12
## 
## Fixed effects:
##                       Estimate Std. Error t value
## (Intercept)          1.8433234  0.1058044  17.422
## maskSpeed           -0.0099074  0.0021010  -4.715
## targSpeed           -0.0073055  0.0024043  -3.038
## maskSpeed:targSpeed -0.0035323  0.0005654  -6.247
## 
## Correlation of Fixed Effects:
##             (Intr) mskSpd trgSpd
## maskSpeed   -0.068              
## targSpeed   -0.073  0.667       
## mskSpd:trgS  0.057 -0.843 -0.785
2 * (1 - pnorm(abs(data.frame(coef(summary(m1)))$t.value))) # approx p's
## [1] 0.000000e+00 2.411306e-06 2.377841e-03 4.173524e-10

Nuisance variables

The above findings remain in place when the models including target and mask speeds (as well as their interaction) are compared against models containing only the nuisance variables (subject’s individual threshold and the trial number).

# Nuisance variable model with trial and subjThresh
mn <- lmer(RT~subjThresh+trial+(1|SubjID), md)
anova(mn)
## Analysis of Variance Table
##            Df  Sum Sq Mean Sq  F value
## subjThresh  1   7.608   7.608   45.259
## trial       1 176.051 176.051 1047.345
summary(mn)
## Linear mixed model fit by REML ['lmerMod']
## Formula: RT ~ subjThresh + trial + (1 | SubjID)
##    Data: md
## 
## REML criterion at convergence: 20791
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -3.6504 -0.6505 -0.0839  0.6019  4.2414 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  SubjID   (Intercept) 0.02678  0.1637  
##  Residual             0.16809  0.4100  
## Number of obs: 19636, groups:  SubjID, 12
## 
## Fixed effects:
##               Estimate Std. Error t value
## (Intercept)  1.9864411  0.0774061   25.66
## subjThresh  -0.4345459  0.0653322   -6.65
## trial        0.0137051  0.0004235   32.36
## 
## Correlation of Fixed Effects:
##            (Intr) sbjThr
## subjThresh -0.788       
## trial      -0.069  0.002
2 * (1 - pnorm(abs(data.frame(coef(summary(mn)))$t.value))) # approx p's
## [1] 0.00000e+00 2.90461e-11 0.00000e+00
# Effects of mask speed and target speed:
mp_m <- lmer(RT~subjThresh+trial+maskSpeed+(1|SubjID), md)
mp_t <- lmer(RT~subjThresh+trial+targSpeed+(1|SubjID), md)
mp_mpt <- lmer(RT~subjThresh+trial+maskSpeed+targSpeed+(1|SubjID), md)
anova(mp_m,mp_mpt) # effect of target speed
## refitting model(s) with ML (instead of REML)
## Data: md
## Models:
## mp_m: RT ~ subjThresh + trial + maskSpeed + (1 | SubjID)
## mp_mpt: RT ~ subjThresh + trial + maskSpeed + targSpeed + (1 | SubjID)
##        Df   AIC   BIC logLik deviance  Chisq Chi Df Pr(>Chisq)    
## mp_m    6 20425 20472 -10206    20413                             
## mp_mpt  7 20243 20298 -10114    20229 184.29      1  < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mp_t,mp_mpt) # effect of mask speed
## refitting model(s) with ML (instead of REML)
## Data: md
## Models:
## mp_t: RT ~ subjThresh + trial + targSpeed + (1 | SubjID)
## mp_mpt: RT ~ subjThresh + trial + maskSpeed + targSpeed + (1 | SubjID)
##        Df   AIC   BIC logLik deviance  Chisq Chi Df Pr(>Chisq)    
## mp_t    6 20607 20654 -10298    20595                             
## mp_mpt  7 20243 20298 -10114    20229 366.32      1  < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Effects of target and mask speed (testing interaction)
mp_mxt <- lmer(RT~subjThresh+trial+maskSpeed*targSpeed+(1|SubjID), md)
anova(mp_mpt,mp_mxt)
## refitting model(s) with ML (instead of REML)
## Data: md
## Models:
## mp_mpt: RT ~ subjThresh + trial + maskSpeed + targSpeed + (1 | SubjID)
## mp_mxt: RT ~ subjThresh + trial + maskSpeed * targSpeed + (1 | SubjID)
##        Df   AIC   BIC logLik deviance  Chisq Chi Df Pr(>Chisq)    
## mp_mpt  7 20243 20298 -10114    20229                             
## mp_mxt  8 20201 20264 -10092    20185 44.226      1  2.925e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(mp_mxt)
## Linear mixed model fit by REML ['lmerMod']
## Formula: RT ~ subjThresh + trial + maskSpeed * targSpeed + (1 | SubjID)
##    Data: md
## 
## REML criterion at convergence: 20242.5
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -3.8317 -0.6325 -0.0523  0.6124  4.2883 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  SubjID   (Intercept) 0.02669  0.1634  
##  Residual             0.16318  0.4040  
## Number of obs: 19636, groups:  SubjID, 12
## 
## Fixed effects:
##                       Estimate Std. Error t value
## (Intercept)          2.0777790  0.0776970   26.74
## subjThresh          -0.4304508  0.0652161   -6.60
## trial                0.0138415  0.0004173   33.17
## maskSpeed           -0.0097019  0.0020446   -4.75
## targSpeed           -0.0075033  0.0023397   -3.21
## maskSpeed:targSpeed -0.0036608  0.0005502   -6.65
## 
## Correlation of Fixed Effects:
##             (Intr) sbjThr trial  mskSpd trgSpd
## subjThresh  -0.783                            
## trial       -0.067  0.002                     
## maskSpeed   -0.089 -0.001  0.003              
## targSpeed   -0.094 -0.003 -0.003  0.667       
## mskSpd:trgS  0.075  0.001 -0.007 -0.843 -0.785
2 * (1 - pnorm(abs(data.frame(coef(summary(mp_mxt)))$t.value))) # approx p's
## [1] 0.000000e+00 4.101053e-11 0.000000e+00 2.082402e-06 1.341451e-03
## [6] 2.862044e-11

Testing the two target speeds in separate models

# Low target speeds
md1 <- md[md$targSpeed==1,]
m1md1 <- lmer(RT~maskSpeed+(1|SubjID), md1)
anova(m1md1)
## Analysis of Variance Table
##           Df Sum Sq Mean Sq F value
## maskSpeed  1 9.6138  9.6138  45.889
summary(m1md1)
## Linear mixed model fit by REML ['lmerMod']
## Formula: RT ~ maskSpeed + (1 | SubjID)
##    Data: md1
## 
## REML criterion at convergence: 11817.2
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -3.4063 -0.6174 -0.0904  0.6070  3.7744 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  SubjID   (Intercept) 0.1116   0.3341  
##  Residual             0.2095   0.4577  
## Number of obs: 9207, groups:  SubjID, 12
## 
## Fixed effects:
##              Estimate Std. Error t value
## (Intercept)  1.834234   0.096960  18.918
## maskSpeed   -0.012367   0.001826  -6.774
## 
## Correlation of Fixed Effects:
##           (Intr)
## maskSpeed -0.066
2 * (1 - pnorm(abs(data.frame(coef(summary(m1md1)))$t.value))) # approx p's
## [1] 0.000000e+00 1.251577e-11
# High target speeds
md2 <- md[md$targSpeed==5,]
m1md2 <- lmer(RT~maskSpeed+(1|SubjID), md2)
anova(m1md2)
## Analysis of Variance Table
##           Df Sum Sq Mean Sq F value
## maskSpeed  1 58.108  58.108  450.02
summary(m1md2)
## Linear mixed model fit by REML ['lmerMod']
## Formula: RT ~ maskSpeed + (1 | SubjID)
##    Data: md2
## 
## REML criterion at convergence: 8341.3
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -3.9159 -0.5818 -0.0277  0.6264  3.8622 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  SubjID   (Intercept) 0.1612   0.4014  
##  Residual             0.1291   0.3593  
## Number of obs: 10429, groups:  SubjID, 12
## 
## Fixed effects:
##             Estimate Std. Error t value
## (Intercept)  1.81067    0.11607   15.60
## maskSpeed   -0.02842    0.00134  -21.21
## 
## Correlation of Fixed Effects:
##           (Intr)
## maskSpeed -0.038
2 * (1 - pnorm(abs(data.frame(coef(summary(m1md2)))$t.value))) # approx p's
## [1] 0 0